﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SistemaFacturacion.Entidades;

namespace SistemaFacturacion
{
    public partial class frmItem : Form
    {
        frmInvoice _parent;

        public frmItem(frmInvoice parent)
        {
            InitializeComponent();
            _parent = parent;
        }

        #region Eventos en pantalla
        /// <summary>
        /// Evento de cambio de valores default para la bodega
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkStore_CheckedChanged(object sender, EventArgs e)
        {
            if (checkStore.Checked)
                txtStore.Enabled = false;
            else
                txtStore.Enabled = true;
        }

        /// <summary>
        /// Evento de cambio de valores default para los impuestos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void checkTax_CheckedChanged(object sender, EventArgs e)
        {
            if (checkTax.Checked)
                txtTax.Enabled = false;
            else
                txtTax.Enabled = true;
        }

        /// <summary>
        /// Evento Agregar Artículo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAceptar_Click(object sender, EventArgs e)
        {
            this.AddItem();
        }

        /// <summary>
        /// Evento para cerrar la ventana
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCerrar_Click(object sender, EventArgs e)
        {
            Close();
        }
        #endregion

        #region Métodos para la recolección de información
        /// <summary>
        ///  Método que se encarga de evaluar los campos de la pantalla
        /// </summary>
        /// <returns>Si hay error o no</returns>
        private bool ValidateFields()
        {
            // Se evalua que si la bodega no está como default entonces que el campo de texto no esté vacío
            if (!checkStore.Checked && txtStore.Text == "")
            {
                MessageBox.Show(Constants.ERROR_ITEM_BAD_ROOM, Constants.DIALOG_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            // Se evalua que si el impuesto no está como default entonces que el campo de texto no esté vacío
            if (!checkTax.Checked && txtTax.Text == "")
            {
                MessageBox.Show(Constants.ERROR_ITEM_BAD_TAX, Constants.DIALOG_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            // Se evalua que el campo de texto del codigo no esté vacío
            if (txtItemCode.Text == "")
            {
                MessageBox.Show(Constants.ERROR_ITEM_BAD_ITEMCODE, Constants.DIALOG_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            // Se evalua que la cantidad de artículos solicitados no sea 0
            if (stepQuantity.Value == 0)
            {
                MessageBox.Show(Constants.ERROR_ITEM_BAD_QUANTITY, Constants.DIALOG_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }

        /// <summary>
        /// Se encarga de agregar un nuevo ítem a la factura si es que no hay ningún error
        /// </summary>
        /// <returns></returns>
        private bool AddItem()
        {
            if (this.ValidateFields())
            {
                String storeRoom;
                if (checkStore.Checked)
                    storeRoom = Constants.DEFAULT_VALUE;
                else
                    storeRoom = txtStore.Text;
                
                String tax;
                if (checkTax.Checked)
                    tax = Constants.DEFAULT_VALUE;
                else
                    tax = txtTax.Text;

                String itemCode = txtItemCode.Text;
                int quantity = Convert.ToInt32(stepQuantity.Value);

                DocDetail item = new DocDetail(itemCode, storeRoom, quantity, tax);

                if (!ExternInvoiceManager.GetInstance().AddNewItem(item))
                {
                    MessageBox.Show(ExternInvoiceManager.GetInstance().ErrorMessage, Constants.DIALOG_TITLE, MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                _parent.AddItemGrid(item);
                Close();
                return true;
            }
            return false;
        }
        #endregion
    }
}
